import java.util.LinkedList;
import java.util.List;

/**
 * 
 */

/**
 * @author SERGIO MOLINA
 *Universidad del Valle de Guatemala
 * Algoritmos y Estructura de Datos
 * Sergio Molina
 * 10256
 * 23 de agosto de 2011
 */
public abstract class Pila<E> implements Stack<E> {

	//atributos 
    protected int apuntador;
    protected List<E> datos;
    
    public Pila(){
        
        apuntador = 0;
        datos = new LinkedList<E>();
    }
    
    @Override
    public void push(E elemento) {
        datos.add(elemento);
        apuntador ++;
    }

    @Override
    public E pop() {
        //variable temporal inicializada en null debido a q no sabemos el tipo de dato que recebira
        E ultimo = null;
        if(apuntador!=0){
            apuntador --;
            ultimo = datos.get(apuntador);
            datos.remove(apuntador);
        }
        else{
            System.out.println("No hay elementos en el Stack.");
        }
        return ultimo;
    }

    @Override
    public E peek() {
        E ultimo = null;
        if(apuntador!=0){
            apuntador --;
            ultimo = datos.get(apuntador);
            apuntador ++;
        }
        else{
            System.out.println("No hay elementos en el Stack.");
        }
        return ultimo;
    }
    
    @Override
    public boolean empty() {
        
    	return apuntador==0?true:false;
        
    }


}
